/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package TCPTools;

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;

/**
 * La classe ProgressBar affiche et actualise la barre de progression
 * lors d'un transfert de fichier 
 *
 * @author      Frank Djomo
 * @author      Christelle SIAGO HAPPI
 * @author      djomopoueme@gmail.com
 * @author      christelle.siagohappi@gmail.com
 * @version     1.0
 */
public class ProgressBar extends JFrame{

    public JPanel      panel;
    public JProgressBar bar;
    private JLabel etat ;

    private long taille;

    /**
    * Constructeur
    * @param taille Taille du fichier en cours de transfert
    * @param c      Determine si l'on est en emission <code>e</code> ou en reception <code>r</code> 
    */
    public ProgressBar( long taille,char c)
    {	

        super();
        setIconImage(new javax.swing.ImageIcon(getClass().getResource("/Ressources/images/app.png")).getImage());

        this.taille = taille;
        panel = new JPanel(new BorderLayout());

        bar = new JProgressBar();
        bar.setMaximum((int)taille);
        bar.setIndeterminate(false);
        bar.setStringPainted(true); // Affichier le %age

        etat = new JLabel();

        if( c=='r' )
            this.setTitle("Reception Fichier");
        else
            this.setTitle("Emission Fichier");


        // Ajout du panel de titre
        panel.add(etat,BorderLayout.SOUTH);
        panel.add(bar,BorderLayout.CENTER);

        this.add(panel);
        this.setSize(320,100);
        this.setVisible(true);
    }
    /**
    *  La methode <code>setProgressBar</code> affcihe l'état d'avancement 
    *  du transfert en cours
    * @param s message d'état
    */
    public void setEtat(String s)
    {
        etat.setText(s);
    }
    /**
    * La methode <code>setProgressBar</code> actualise la barre de progression
    * suivant la valeur de vitesse.
    * @param vitesse   Vitesse du transfert en cours
    */
    public void setProgressBar(Vitesse vitesse)
    {

        long l = vitesse.getOctectTraite();

        // Mise à jour de l'avancement
        bar.setValue((int)l);
        // Mise à jour de la vitesse de transfert
        setEtat("Vitesse : "+getExactValue(vitesse.getVitesseValue())+"/s"+
               "                             Reçu :"+(getExactValue(l)+" / "+getExactValue(taille)));
    }
    /**
    * Obtenir un affichage intelligible de la variable value
    * @param value valeur à convertir
    */
    private String getExactValue(long value)
    {

        if(value >= 1024*1024*1024)
            return ""+(value/1024/1024/1024)+"."+(value/1024/1024-1024*(value/1024/1024/1024))/100+" Go";
        else if(value >= 1024*1024)
            return ""+(value/1024/1024)+"."+(value/1024-1024*(value/1024/1024))/100+" Mo";
        else if(value >= 1024)
            return ""+(value/1024)+"."+(value-1024*(value/1024))/100+" Ko";
        return ""+value+" o";
    }
}

    
    
    

